package com.secxiot.provider;

import com.secxiot.provider.task.vo.SosDeptFacilityVo;
import com.secxiot.provider.user.dto.DeptDto;
import com.secxiot.provider.user.dto.UserDeptDto;
import com.secxiot.provider.user.vo.DeptVo;
import com.secxiot.provider.user.vo.HospitalVo;
import com.secxiot.provider.user.vo.UserSimpleVo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;

import java.math.BigDecimal;
import java.util.List;

public interface DeptApi {

    /**
     * 获取用户部门信息
     *
     * @param userId 用户id
     * @return 部门信息
     */
    DeptDto getDeptByUserId(Long userId);

    /**
     * 获取部门信息
     *
     * @param deptId 部门id
     * @return 部门信息
     */
    DeptDto getDeptByDeptId(Long deptId);

    /**
     * 获取该部门下一层级部门
     *
     * @param deptId 部门id
     * @return 部门信息
     */
    List<DeptDto> listSubdeptByDeptId(Long deptId);

    /**
     * 根据用户经纬度获取周边医院列表
     *
     * @param userId    用户id
     * @param longitude 用户经度
     * @param latitude  用户纬度
     * @return 医院信息列表
     */
    List<HospitalVo> listHospitalsByUser(Long userId, BigDecimal longitude, BigDecimal latitude, String wxAppId);

    /**
     * 根据经纬度获取医院距离
     *
     * @param longitude  经度
     * @param latitude   纬度
     * @param hospitalId 医院ID
     * @return
     */
    @GetMapping("/depts/hospital/nearest")
    HospitalVo getNearestHospital(BigDecimal longitude, BigDecimal latitude, Long hospitalId);

    /**
     * 医疗机构详情
     *
     * @param id id
     * @return
     */
    @GetMapping("/depts/hospital/detail/{id}")
    HospitalVo getHospitalById(Long id);

    @GetMapping("/hospital/detailByDeptId/{deptId}")
    HospitalVo getHospitalByDeptId(@RequestParam("deptId") Long deptId);


    /**
     * 获取医院详情
     *
     * @param longitude 经度
     * @param latitude  维度
     * @param deptId    部门Id
     * @return
     */
    @GetMapping("/hospital/getHospitalDistance/detail")
    HospitalVo getHospitalDistanceByDeptId(@RequestParam("longitude") BigDecimal longitude,
                                           @RequestParam("latitude") BigDecimal latitude,
                                           @RequestParam("deptId") Long deptId);

    /**
     * 医疗机构列表
     *
     * @return
     */
    List<HospitalVo> selectHospital();

    /**
     * 获取医院SOS部门得设备
     *
     * @param deptId     部门id
     * @param hospitalId 医院id
     * @return SOS部门设备列表
     */
    List<SosDeptFacilityVo> sosFacility(Long deptId, Long hospitalId);

    /**
     * 获取子部门管理者
     *
     * @param deptId 部门id
     * @return 子部门管理者集合
     */
    @GetMapping("/subManagers")
    List<UserSimpleVo> listSubManagers(@PathVariable("deptId") Long deptId);

    /**
     * 获取用户的非直属上级部门，根据deptLevel由小到大排序
     *
     * @param userId 用户id
     * @return 部门列表
     */
    @GetMapping("/suppers")
    List<UserDeptDto> listSupperDeptByUserId(@RequestParam("deptId") Long userId);

    /**
     * 以给定的部门id为根节点获取所有层级部门树
     *
     * @param deptId 部门id
     * @return 部门信息
     */
    @GetMapping("/toLeaf")
    List<DeptDto> listToLeafByDeptId(@RequestParam("deptId") Long deptId);

    /**
     * 获取parentId下的部门列表
     *
     * @param parentId
     * @return
     */
    List<DeptVo> listDeptByParentId(Long parentId);
}
